Jak na jmeno unity

Otázka od: Lstiburek Pavel

22. 10. 2002 8:44

Nevite nekdo zda existuje nejaky zpusob jak za behu (nebo nejakym makrem)
zjistit jmeno unity ? Potreboval bych zjistovat udaje u unitach a jeden z
nich je jeji jmeno. Nekde by to byt melo, protoze debuger to dokaze !

Pavel

Odpovedá: Petr Vones

22. 10. 2002 15:46

From: "Lstiburek Pavel" <Lstiburek@ceb.cz>
> Nevite nekdo zda existuje nejaky zpusob jak za behu (nebo nejakym makrem)
> zjistit jmeno unity ? Potreboval bych zjistovat udaje u unitach a jeden z
> nich je jeji jmeno. Nekde by to byt melo, protoze debuger to dokaze !

Debugger vi totiz neco, co nevi tvoje aplikace   Muzes pouzit funkci
ModuleByLevel z JCL, je ovsem nutne do aplikace pridat jeste dalsi informace
(cca 12% velikosti MAP filu) ktere toto umoznuji zjistovat za behu aplikace,
podrobnosti v Readme.txt. Priklady pouziti:

uses
  JclDebug;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(ModuleByLevel);
  // Zobrazi: Unit1
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  ShowMessage(GetLocationInfoStr(Caller));
  // Zobrazi: [0045F941] Unit1.TForm1.Button2Click (Line 38, "Unit1.pas")
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  ShowMessage(GetLocationInfoStr(Caller, True, True, True));
  // Zobrazi: [0045F941]{Project1.exe} Unit1.TForm1.Button2Click (Line 38,
              "Unit1.pas" + 1) + $A
end;

Vice na:
http://sourceforge.net/project/showfiles.php?group_id=47514&release_id=100652
http://delphi-jedi.org/CODELIBJCL

Petr Vones

Odpovedá: Dalibor Toman

22. 10. 2002 14:37

> Debugger vi totiz neco, co nevi tvoje aplikace   Muzes pouzit
funkci
> ModuleByLevel z JCL, je ovsem nutne do aplikace pridat jeste dalsi
informace
> (cca 12% velikosti MAP filu) ktere toto umoznuji zjistovat za behu
aplikace,

je pravdepodobne, ze to jde i bez toho (minimalne ziskat jmena
pouzitych knihoven) - pokud se juknete na konec libovolneho execka
kompilovaneho v Delphi je tam seznam jmen pouzitych knihoven vcetne
jmena projektu  


D. Toman

Odpovedá: Petr Vones

22. 10. 2002 14:16

From: "Dalibor Toman" <dtoman@fortech.cz>
> je pravdepodobne, ze to jde i bez toho (minimalne ziskat jmena
> pouzitych knihoven) - pokud se juknete na konec libovolneho execka
> kompilovaneho v Delphi je tam seznam jmen pouzitych knihoven vcetne
> jmena projektu  

Presneji receno je to v PACKAGEINFO resource a lze to vypsat do citelne
podoby, jsou na to funkce v Delphi RTL nebo JclPeImage. Jenze tim ziskas jen
seznam unitu, ne jmeno unitu v miste volani z aplikace, na co predpokladam ze
byl puvodni dotaz. Jeste je mozne ziskat jmeno unitu z tridy pomoci RTTI, ale
to asi take neni presne ono.

Petr Vones